/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.unicon.autoservicio.view.bean;

import com.icesoft.faces.component.gmap.GMapLatLng;
import com.icesoft.faces.context.effects.JavascriptContext;
import com.unicon.autoservicio.bean.DespachoCSViewBean;
import com.unicon.autoservicio.bean.PedidoCSViewBean;
import com.unicon.autoservicio.dao.PedidoDAO;
import com.unicon.autoservicio.util.Util;
import com.unicon.sdc.ds.ws.DespachosCSBean;
import com.unicon.sdc.ds.ws.PedidoBean;
import com.unicon.sdc.ds.ws.TruckLocationBean;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.PhaseId;
import javax.servlet.http.HttpServletRequest;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.XMLGregorianCalendar;


/**
 *
 * @author JMENDOZA | 20140108 | Proy. 817
 * @author JMENDOZA | 20140210 | Proy. 817: Que tengo para hoy
 */
public class ConsultaPedidoCSBean extends BaseManageBean {

   private Date fechaPedidoDesde;
    private Date fechaPedidoHasta;    
    private String mensajePedidoCS;
    private String codigoObraSelected;
    private List<PedidoCSViewBean> pedidosVb;
    private List<PedidoBean> pedidos;
    private String selectedTipoPedido;
    private boolean modalRenderedPopup = false;
    private List<GMapLatLng> latlngList;
    private List<TruckLocationBean> truckLocations;
    private String urlKml;
    private boolean RenderedMap = true;
    private String tiCon = "";
    private List<DespachoCSViewBean> despachosVB;
    private List<DespachosCSBean> despachos;
    
    private String orderCodeMap = "";
    private Date orderDateMap;    
    
    private Date FechaActual;
    
    private String exportarProgramaSemana;

    
    //<editor-fold defaultstate="collapsed" desc="Contructor">
    public ConsultaPedidoCSBean() throws ParseException, DatatypeConfigurationException {
        codigoObraSelected = "";
        fechaPedidoDesde = new Date(System.currentTimeMillis());
        fechaPedidoHasta = new Date(System.currentTimeMillis());
        exportarProgramaSemana = "";
        Date fechaPedido7dias;
        Calendar cal = Calendar.getInstance();
        
        String currPage = "";
        
        Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest();
        
        if(request instanceof HttpServletRequest)
        {
                currPage = ((HttpServletRequest) request).getServletPath().toString().replace("/", "");
                currPage = currPage.replace(".iface", "");
        }else
        {
            currPage = "";
        }    
        
        pedidosVb = new ArrayList<>();
        latlngList = new ArrayList<>();
        RenderedMap = false;
        JavascriptContext.includeLib("http://maps.google.com/maps?file=api&amp;v=2&amp;key=AIzaSyDExeMSlW8bf6ifNYCXbZpuiT3nL3oVMes", FacesContext.getCurrentInstance()); 
        
        switch (currPage){
            case "quetengoprogramado":
                cal.add(Calendar.DAY_OF_MONTH, 7);
                fechaPedido7dias = cal.getTime();
                fechaPedidoHasta = fechaPedido7dias;
                tiCon    = "1";
                listaPedidos();
                break;
                
            case "despachosdeldia":
                cal.add(Calendar.DAY_OF_MONTH, -851);
                fechaPedido7dias = cal.getTime();
                fechaPedidoDesde = fechaPedido7dias;
                //fechaPedidoHasta = fechaPedido7dias;
                tiCon    = "2";
                listaPedidos();
                break;
                /*
            case "consultaMapa":
                SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yyyy-MM-dd");
            
                String orderDate_ = (String)((HttpServletRequest) request).getAttribute("orderDate");
                String orderCode_ = (String)((HttpServletRequest) request).getAttribute("orderCode");
                
                if((orderDate_!=null) && (orderCode_!=null) ){
                
                    this.orderDateMap = formatoDelTexto.parse(orderDate_);
                    this.orderCodeMap = orderCode_;
                    
                }
                
                break;
                */
            default:                
                tiCon    = "2";
                break;
        }    
    }
    //</editor-fold>

    
    //<editor-fold defaultstate="collapsed" desc="Metodos ActionEvent">
        
    public boolean btnBuscarActionPerformed(ActionEvent event) throws DatatypeConfigurationException  {
        setMensajePedidoCS("");
        
        if (!event.getPhaseId().equals(PhaseId.INVOKE_APPLICATION)) {
            event.setPhaseId(PhaseId.INVOKE_APPLICATION);
            event.queue();
            return true;
        }
                
        if (getFechaPedidoDesde().compareTo(getFechaPedidoHasta()) > 0) {
            setMensajePedidoCS("La fecha Desde debe ser menor a la fecha Hasta.");
            return true;
        }
        
        listaPedidos();
        
        return true;
    }
    
    public boolean btnKmlActionPerformed(ActionEvent event) throws DatatypeConfigurationException {
        setMensajePedidoCS("");
        
        if (!event.getPhaseId().equals(PhaseId.INVOKE_APPLICATION)) {
            event.setPhaseId(PhaseId.INVOKE_APPLICATION);
            event.queue();
            return true;
        }
        
        
        
        return true;
    }
      
    public void verMapaAc(ActionEvent event) throws DatatypeConfigurationException  {    
        
        String ls = "1";
        
    }
    public void verDetalle(ActionEvent event) throws DatatypeConfigurationException  {    
        
        if (!event.getPhaseId().equals(PhaseId.INVOKE_APPLICATION)) {
            event.setPhaseId(PhaseId.INVOKE_APPLICATION);
            event.queue();
            return;
        }
        Date orderDate_ = (Date)event.getComponent().getAttributes().get("dte"); 
        String orderCode_ = (String)event.getComponent().getAttributes().get("ord");  
        
        modalRenderedPopup = listaDespachos(orderDate_, orderCode_);
        
    }
    
     /*public void openPopupClicked(ActionEvent event) {
      * // View's id in the same form as used in the navigation rules in faces-config.xml
      * // This value could be passed as parameter (using <f:param>)
      * final String viewId = "/popup.faces";
      * 
      * FacesContext facesContext = FacesContext.getCurrentInstance();
      * 
      * // This is the proper way to get the view's url
      * ViewHandler viewHandler = facesContext.getApplication().getViewHandler();
      * String actionUrl = viewHandler.getActionURL(facesContext, viewId);
      * 
      * String javaScriptText = "window.open('"+actionUrl+"', 'popupWindow', 'dependent=yes, menubar=no, toolbar=no');";
      * 
      * // Add the Javascript to the rendered page's header for immediate execution
      * AddResource addResource = AddResourceFactory.getInstance(facesContext);
      * addResource.addInlineScriptAtPosition(facesContext, AddResource.HEADER_BEGIN, javaScriptText);
      * }*/
    
    //</editor-fold>    
  
    
    //<editor-fold defaultstate="collapsed" desc="Metodos">
     
    

    public String getExportarProgramaSemana() {
        
        if(pedidosVb.isEmpty() )
        {
            return "";
        }
        
        SimpleDateFormat sdfFecha = new SimpleDateFormat("dd/MM/yyyy");
        FacesContext fc = FacesContext.getCurrentInstance();
        UsuarioBean usuarioBean = getSessionUser(); 
              
        /*return fc.getExternalContext().getRequestContextPath() + "/ServletReportes?opcion=pedidosemana" +
         * "&tipo=pdf"  +
         * "&usu=" + usuarioBean.getCodigoUsuario() +
         * "&cli=" + usuarioBean.getCodigoCliente() +
         * "&feini=" + sdfFecha.format(fechaPedidoDesde)+
         * "&fefin=" + sdfFecha.format(fechaPedidoHasta) +
         * "&obr=" + codigoObraSelected ;*/
        
        
        return fc.getExternalContext().getRequestContextPath() + "/ExportarPDF?reporte=ExportarProgramaSemana" +
          "&cousu=" + usuarioBean.getCodigoUsuario() +
          "&cocli=" + usuarioBean.getCodigoCliente() +
          "&feini=" + sdfFecha.format(fechaPedidoDesde)+
          "&fefin=" + sdfFecha.format(fechaPedidoHasta) +
          "&coobr=" + codigoObraSelected ;
    }
    
    private void listaPedidos() throws DatatypeConfigurationException
    {
        UsuarioBean usuarioBean = getSessionUser();
        FechaActual = new Date(System.currentTimeMillis());
        XMLGregorianCalendar fecini, fecfin;
        fecini = Util.dateToXMLGregorian(getFechaPedidoDesde());
        fecfin = Util.dateToXMLGregorian(getFechaPedidoHasta());
        pedidos = null;
        pedidosVb = null;
        pedidosVb = new ArrayList<>();
        PedidoDAO pedidoDao = new PedidoDAO();
        pedidos = pedidoDao.getPedidosCS(
                usuarioBean.getCodigoUsuario(),
                usuarioBean.getCodigoCliente(),
                fecini,
                fecfin,
                getSelectedObra(),
                getSelectedTipoPedido(),
                tiCon,
                usuarioBean.getCodigoUsuario(),
                usuarioBean.getClave());
        PedidoCSViewBean pedidoVb = null;
        FacesContext fc = FacesContext.getCurrentInstance();
        for (PedidoBean pedido : pedidos) {
            String urlDir_ = fc.getExternalContext().getRequestContextPath() + pedido.getUrl();
            pedido.setUrl(urlDir_);
            pedidoVb = new PedidoCSViewBean(pedido);            
            
            getPedidosVb().add(pedidoVb);
        }
    }
    
    private boolean listaDespachos(Date ordDat, String ordCod) throws DatatypeConfigurationException{
        UsuarioBean usuarioBean = getSessionUser();
        
        XMLGregorianCalendar fecini, fecfin;
        fecini = Util.dateToXMLGregorian(ordDat);
        fecfin = Util.dateToXMLGregorian(ordDat);
        despachos = null;
        despachosVB = null;
        despachosVB = new ArrayList<>();
        PedidoDAO pedidoDao = new PedidoDAO();
        despachos = pedidoDao.getDespachosCS(
                usuarioBean.getCodigoUsuario(),
                usuarioBean.getCodigoCliente(),
                fecini,
                fecfin,
                "",
                ordCod,
                /* JMENDOZA | 20140306 | Proy.817: Se agrega un parámetro mas */
                "1",
                usuarioBean.getCodigoUsuario(),
                usuarioBean.getClave());
        DespachoCSViewBean despachoVB = null;
        if(despachos.size() > 0)
        {
            for (DespachosCSBean despacho : despachos) {

                despachoVB = new DespachoCSViewBean(despacho);

                getDespachosVB().add(despachoVB);
            }
            
            return true;
        }
        else
        {
            return false;
        }
        
    }
    
      public void toggleModalPopup(ActionEvent event) {
        modalRenderedPopup = false;        
    }
    
    /*
    private boolean setMarcas(Date ordDate, String ordCode) throws DatatypeConfigurationException{
        
        if((ordDate!=null) && (ordCode!=null) ){
            
            // Generate a set of default map marker locations
            XMLGregorianCalendar orderDate;
            orderDate = Util.dateToXMLGregorian(ordDate);
            
            PedidoDAO pedidoDao = new PedidoDAO();
            
            truckLocations = pedidoDao.getTruckLocations(
                    orderDate,
                    ordCode,
                    "",
                    "",
                    "");
            
            if(!(truckLocations.size() > 0)) { return false;}
            
            latlngList = new ArrayList<GMapLatLng>();
            
            for (TruckLocationBean truckLocation : truckLocations) {
                String longitud = String.valueOf(truckLocation.getLongitud());
                String latitud = String.valueOf(truckLocation.getLatutud());
                
                //points.add(new GMapLatLng(longitud, latitud));
                
                latlngList.add(new GMapLatLng(longitud, latitud));
            }
            
            return true;
            
        }
        else{
            return false;
        }
        
    }
    
  
    
    public void setKmlDinamico( String xmlSource) throws ParserConfigurationException,
            TransformerConfigurationException,
            TransformerException,
            SAXException,
            IOException
    {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(new InputSource(new StringReader(xmlSource)));
        
        // Write the parsed document to an xml file
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        
        StreamResult result =  new StreamResult(new File("my-file.xml"));
        transformer.transform(source, result);
    }
    */
    //</editor-fold>
    
    
    //<editor-fold defaultstate="collapsed" desc="Getter and Setter">
    public String getSelectedTipoPedido() {
        return selectedTipoPedido;
    }
    
    public void setSelectedTipoPedido(String selectedTipoPedido) {
        this.selectedTipoPedido = selectedTipoPedido;
    }
    
    /**
     * @return the fechaPedidoDesde
     */
    public Date getFechaPedidoDesde() {
        return fechaPedidoDesde;
    }
    
    /**
     * @param setFechaPedidoDesde the fechaPedidoDesde to set
     */
    public void setFechaPedidoDesde(Date fechaPedidoDesde) {
        this.fechaPedidoDesde = fechaPedidoDesde;
    }
    
    /**
     * @return the getFechaPedidoHasta
     */
    public Date getFechaPedidoHasta() {
        return fechaPedidoHasta;
    }
    
    /**
     * @param fechaPedidoHasta the fechaPedidoHasta to set
     */
    public void setFechaPedidoHasta(Date fechaPedidoHasta) {
        this.fechaPedidoHasta = fechaPedidoHasta;
    }
    
    /**
     * @return the mensajePedidoCS
     */
    public String getMensajePedidoCS() {
        return mensajePedidoCS;
    }
    
    /**
     * @param mensajePedidoCS the mensajePedidoCS to set
     */
    public void setMensajePedidoCS(String mensajePedidoCS) {
        this.mensajePedidoCS = mensajePedidoCS;
    }
    
    /**
     * @return the codigoObraSelected
     */
    public String getCodigoObraSelected() {
        return codigoObraSelected;
    }
    
    /**
     * @param codigoObraSelected the codigoObraSelected to set
     */
    public void setCodigoObraSelected(String codigoObraSelected) {
        this.codigoObraSelected = codigoObraSelected;
    }
    
    /**
     * @return the pedidosVb
     */
    public List<PedidoCSViewBean> getPedidosVb() {
        return pedidosVb;
    }
    
    /**
     * @param pedidosVb the pedidosVb to set
     */
    public void setPedidosVb(List<PedidoCSViewBean> pedidosVb) {
        this.pedidosVb = pedidosVb;
    }
    
    public List<GMapLatLng> getLatlngList() {
        return latlngList;
    }
    
    public void setLatlngList(List<GMapLatLng> latlngList) {
        this.latlngList = latlngList;
    }
    
    public String getUrlKml() {
        return urlKml;
    }
    
    public void setUrlKml(String urlKml) {
        this.urlKml = urlKml;
    }    
    
    public boolean getModalRenderedPopup() {
        return modalRenderedPopup;
    }

    public void setModalRenderedPopup(boolean modalRenderedPopup) {
        this.modalRenderedPopup = modalRenderedPopup;
    }    
     public boolean isRenderedMap() {
        return RenderedMap;
    }

    public void setRenderedMap(boolean RenderedMap) {
        this.RenderedMap = RenderedMap;
    }

    public List<DespachoCSViewBean> getDespachosVB() {
        return despachosVB;
    }

    public void setDespachosVB(List<DespachoCSViewBean> despachosVB) {
        this.despachosVB = despachosVB;
    }

    public Date getFechaActual() {
        return FechaActual;
    }

    public void setFechaActual(Date FechaActual) {
        this.FechaActual = FechaActual;
    }
    
    

    public void setExportarProgramaSemana(String exportarProgramaSemana) {
        this.exportarProgramaSemana = exportarProgramaSemana;
    }
    
    
    //</editor-fold>

    
     
     
}

